# -*- coding: utf-8 -*-
# author: sixmillions
# date: 2022/3/16

# 集合是一个拥有确定（唯一）的、不变的的元素，且元素无序的可变的数据组织形式。

# 集合初始化
print(type({1, 2, 3}))  # <class 'set'>
# 单个元素集合
print(type({1}))  # <class 'set'>
# 空集合定义
print(type(set()))  # <class 'set'>
print(len(set()))  # 0
# 不能直接使用{}定义空集合，因为{}是定义空字典的方式
print(type({}))  # <class 'dict'>

# 可以通过list初始化
ss = set([1, 2, 1, 3, 4, 3])
print(ss)  # {1, 2, 3, 4}

# 集合无序（初始化的顺序和输出的顺序不一样）
print({'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'})  # {'SAS', 'Python', 'R', 'SQL', 'Git', 'Tableau'}

# 集合会去重（唯一）
print({2, 3, 2, 5, 6, 3})  # {2, 3, 5, 6}

# 结合不能用列表那种方式进行索引和切片,不报报错 TypeError: 'set' object is not subscriptable
# print({2, 3, 4}[0])

# 长度
print(len({4, 4, 7, 9, 8}))  # 4

# 判断元素存在
s = {4, 5, 6, 7}
print(4 in s)  # True
print('4' in s)  # False
print('4' not in s)  # True

# 集合特有操作
s1 = {4, 5, 4, 7, 8}
s2 = {5, 8, 9}
# 差集
print(s1 - s2)  # {4, 7}
print(s2 - s1)  # {9}
# 交集
print(s1 & s2)  # {8, 5}
# 并集
print(s1 | s2)  # {4, 5, 7, 8, 9}
# s1 和 s2 不同时存在的元素(交集减去并集)
print(s1 ^ s2)  # {4, 7, 9}
